package cn.lili.modules.promotion.service;

import cn.lili.common.security.AuthUser;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.promotion.entity.dos.BlindboxPrizePaper;
import cn.lili.modules.promotion.entity.dos.BlindboxRule;
import cn.lili.modules.promotion.entity.dto.search.BlindboxPrizepaperSearchParams;
import cn.lili.modules.promotion.entity.vos.BlindboxRuleVO;
import cn.lili.modules.promotion.entity.vos.BlindboxVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 盲盒奖卷 业务层
 *
 * @author xiangqian
 */
public interface BlindboxPrizePaperService extends IService<BlindboxPrizePaper> {

    /**
     * 获取盲盒奖卷列表
     *
     * @param page       分页条件
     * @param queryParam 查询条件
     */
    Page<BlindboxPrizePaper> getPage(BlindboxPrizePaper queryParam, PageVO page);

    /**
     * 根据商品id查询盲盒活动
     *
     * @param currentUser 用户ID
     * @param goodsId     商品ID
     */
    BlindboxVO getBlindbox(AuthUser currentUser, String goodsId);

    /**
     * 根据商品ID加用户ID查询我的奖卷
     *
     * @param goodsId  商品ID
     * @param memberId 用户ID
     */
    List<BlindboxPrizePaper> getBlindboxPrizePaper(String memberId, String goodsId);

    /**
     * 查询我的已读/未读/所有奖卷
     *
     * @param currentUser                    用户
     * @param blindboxPrizepaperSearchParams 查询条件
     */
    List<BlindboxPrizePaper> getPrizepaper(AuthUser currentUser, BlindboxPrizepaperSearchParams blindboxPrizepaperSearchParams);

    /**
     * 查询我的已读/未读/所有奖卷
     *
     * @param currentUser 用户
     * @param codes       奖卷CODE多个
     */
    boolean updatePrizepaperRead(AuthUser currentUser, List<String> codes);

    /**
     * 新增奖卷
     *
     * @param userId  用户ID
     * @param goodsId 商品ID
     * @param blindboxRule 规则
     */
    boolean insertPrizepaperRead(String userId, String goodsId, BlindboxRule blindboxRule);

    /**
     * 根据code获取奖卷
     *
     * @param code 奖卷CODE
     */
    BlindboxPrizePaper getPrizepaperByCode(String code);
}